package com.bryant.demo05

import android.util.SparseArray
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.bryant.demo05.ui.home.HomeFragment
import com.bryant.demo05.ui.me.MeFragment
import com.bryant.demo05.ui.start.StartFragment

/**
 * ViewPagerAdapter类用于管理Fragment页面的适配器
 * 该适配器继承自FragmentStateAdapter，适用于ViewPager2组件
 *
 * @param fragmentActivity FragmentActivity实例，作为Fragment的宿主Activity
 */
class ViewPagerAdapter(fragmentActivity: FragmentActivity) :
    FragmentStateAdapter(fragmentActivity) {
    // 1. 定义缓存数组
    private val fragmentsCache = SparseArray<Fragment>()
    override fun createFragment(position: Int): Fragment {
        // 2. 尝试从缓存中获取Fragment
        val fragment = fragmentsCache.get(position)
        // 3. 判断Fragment是否为空， 并返回结果
        return if (fragment != null) {
            fragment
        } else {
            // 缓存中没有时 -> 根据位置创建对应的Fragment实例
            val newFragment = when (position) {
                0 -> HomeFragment()
                1 -> StartFragment()
                2 -> MeFragment()
                /**
                 * 当位置参数无效时，抛出IllegalArgumentException异常
                 *
                 * @param position 无效的位置值
                 * @throws IllegalArgumentException 当传入的位置参数不符合预期时抛出
                 */
                else -> throw IllegalArgumentException("Invalid position: $position")
            }
            // 把新建的Fragment添加到缓存中
            fragmentsCache.put(position, fragment)
            // 返回结果
            newFragment
        }
    }

    /**
     * 获取列表项的数量
     *
     * @return 返回列表中项目的总数，固定返回值为3
     */
    override fun getItemCount(): Int {
        return 3
    }



}
